home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 5
/
Apprentice-Release5.iso
/
Source Code
/
C
/
Frameworks
/
TransSkel 3.24
/
Demos
/
C Demos
/
MultiSkel
/
MSkelEdit.c
next >
Wrap
Text File
|
1994-02-21
|
3KB
|
192 lines
/*
* TransSkel multiple-window demonstration: TextEdit module
*
* This module handles a simple TextEdit window, in which text may be
* typed and standard Cut/Copy/Paste/Clear operations may be performed.
* Undo is not supported, nor is text scrolling.
*
* 21 Apr 88 Paul DuBois
* 29 Jan 89
* - Conversion for TransSkel 2.0.
* 12 Jan 91
* - Conversion for TransSkel 3.0.
*/
# include "TransSkel.h"
# include "MultiSkel.h"
/* Edit menu item numbers */
typedef enum {
undo = 1,
/* --- */
cut = 3,
copy,
paste,
clear
} editItems;
static TEHandle teEdit; /* handle to text window TextEdit record */
static pascal void
Mouse (Point pt, long t, short mods)
{
TEClick (pt, (Boolean) ((mods & shiftKey) != 0), teEdit);
}
static pascal void
Key (short c, short code, short mods)
{
TEKey (c, teEdit);
}
/*
* Update text window. The update event might be in response to a
* window resizing. If so, resize the rects and recalc the linestarts
* of the text. To resize the rects, only the right edge of the
* destRect need be changed (the bottom is not used, and the left and
* top should not be changed). The viewRect should be sized to the
* screen.
*/
static pascal void
Update (Boolean resized)
{
Rect r;
r = editWind->portRect;
EraseRect (&r);
r.left += 4;
r.bottom -= 2;
r.top += 2;
r.right -= 19;
if (resized)
{
(**teEdit).destRect.right = r.right;
(**teEdit).viewRect = r;
TECalText (teEdit);
}
DrawGrowBox (editWind);
TEUpdate (&r, teEdit);
}
static pascal void
Activate (Boolean active)
{
DrawGrowBox (editWind);
if (active)
{
TEActivate (teEdit);
DisableItem (editMenu, undo);
}
else
{
TEDeactivate (teEdit);
EnableItem (editMenu, undo);
}
}
static pascal void
Clobber (void)
{
TEDispose (teEdit);
DisposeWindow (editWind);
}
static pascal void
Idle (void)
{
TEIdle (teEdit); /* blink that cursor! */
}
void EditWindInit (void)
{
Rect r;
StringPtr str;
if (SkelQuery (skelQHasColorQD))
editWind = GetNewCWindow (editWindRes, nil, (WindowPtr) -1L);
else
editWind = GetNewWindow (editWindRes, nil, (WindowPtr) -1L);
if (editWind == (WindowPtr) nil)
return;
(void) SkelWindow (editWind,
Mouse, /* handle mouse-clicks */
Key, /* Key keyclicks */
Update,
Activate,
nil, /* no close proc */
Clobber, /* disposal proc */
Idle, /* idle proc */
true);
TextFont (0);
TextSize (0);
r = editWind->portRect;
r.left += 4;
r.bottom -= 2;
r.top += 2;
r.right -= 19;
teEdit = TENew (&r, &r);
str = (StringPtr) "\pThis is the text editing window.\r";
TEInsert (&str[1], (long) str[0], teEdit);
}
/*
* Handle Edit menu items for text window
*/
pascal void
EditWindEditMenu (short item)
{
switch (item)
{
/*
* cut selection, put in TE Scrap, clear clipboard and put
* TE scrap in it
*/
case cut:
TECut (teEdit);
(void) ZeroScrap ();
(void) TEToScrap ();
break;
/*
* copy selection to TE Scrap, clear clipboard and put
* TE scrap in it
*/
case copy:
TECopy (teEdit);
(void) ZeroScrap ();
(void) TEToScrap ();
break;
/*
* get clipboard into TE scrap, put TE scrap into edit record
*/
case paste:
(void) TEFromScrap ();
TEPaste (teEdit);
break;
/*
* delete selection without putting into TE scrap or clipboard
*/
case clear:
TEDelete (teEdit);
break;
}
}